<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // 通常的循环都是和数组的相关的
    // const arr = [1,2,3,4,5,6,7,8,9];

    // 普通的for循环，i表示索引
    // for (let i = 0; i < arr.length; i++) {
    //   console.log(arr[i]);
    // }



    // 循环嵌套
    // const arr = [[1,2,3],[4,5,6],[7,8,9]];
    // for (let i = 0; i < arr.length; i++) {
    //   for (let j = 0; j < arr[i].length; j++) {
    //     console.log(arr[i][j]);
    //   }
    // }



    




    // 以后的代码里面，尽可能不要用for循环了


    const arr = [1,2,3,4,5,6,7,8,9];
    // 1. for...of循环
    // forof是用来循环数组的，forin是用来循环对象的
    // item表示数组里面的每一项，形参，可以叫任何的名字
    // forof的循环方式，是拿不到index索引的
    // for (const item of arr) {
    //   console.log(item);
    // }


    // 当一个函数，需要接受另一个函数作为参数，那么这个函数也叫高阶函数
    // 2. forEach方法
    // forEach是没有办法让循环停下来的
    // forEach中的return跳出的是当次循环，而不是整个循环
    // arr.forEach((item, index) => {
    //   console.log(item);
    //   if (item === 5) {
    //     return
    //   };
    //   console.log("aaa");
    // });



    // 3. map方法
    // 映射(将数组里面的每一项，都做一个相同的转换)
    // map方法里面必须要有return
    // map方法有一个返回值，返回值就是转换完的新函数
    // const newArr = arr.map((item) => {
    //   return item * 2
    // })
    // console.log(newArr);



    // 4. filter方法
    // 过滤(将数组中的满足条件的项过滤出来，得到一个过滤以后的结果)
    // filter方法里面必须要有return
    // filter方法有一个返回值，返回值就是过滤以后的新函数
    // const newArr = arr.filter((item) => {
    //   // return后面写条件
    //   return item % 2;
    // })
    // const newArr = arr.filter(item => item % 2)
    // console.log(newArr);



    // 5. reduce方法
    // 用来做累加累乘
    // const result = arr.reduce((sum, item) => {
    //   return sum += item;
    // }, 0);
    // console.log(result);
    // const result = arr.reduce((sum, item) => {
    //   return sum *= item;
    // }, 1);
    // console.log(result);



    // 6. every方法
    // 判断数组的每一项是否都满足条件
    // 返回的是一个布尔值
    // let result = arr.every((item) => {
    //   return item > 0;
    // });
    // console.log(result);



    // 7. some方法
    // 判断数组的是否有一项满足条件
    // 返回的是一个布尔值
    // let result = arr.some((item) => {
    //   return item > 10;
    // });
    // console.log(result);



    // 8. find方法
    // 找到数组里面满足条件的第一项
    // let result = arr.find((item) => {
    //   return item > 3;
    // });
    // console.log(result);



    // 9. findIndex
    // 找到数组里面满足条件的第一项的索引
    // let result = arr.findIndex((item) => {
    //   return item > 3;
    // });
    // console.log(result);
    
    
    
    
    // 练习：
    // const arr1 = [
    //   {
    //     name: "周培钦",
    //     sex: 1
    //   },
    //   {
    //     name: "李诚豪",
    //     sex: 1
    //   },
    //   {
    //     name: "吴雪",
    //     sex: 2
    //   }
    // ]
    // const arr2 = arr1.filter((item) => {
    //   return item.sex === 1;
    // })
    // console.log(arr2);




    // 只有有返回值的方法，都可以直接做链式操作
    // const result = arr.map(item => item * 2).reduce((sum, item) => {
    //   return sum += item
    // }, 0);
    // console.log(result);

    
    
  </script>
</body>
</html>